package com.jedis;

import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import com.github.jedis.lock.JedisLock;

import redis.clients.jedis.Jedis;

public class JedisDemo {
	
	ExecutorService service = Executors.newScheduledThreadPool(100);
	
	public void test() {
		final Jedis redis = new Jedis("127.0.0.1", 6379);// 连接redis
		// redis.auth("redis");// 验证密码,如果需要验证的话
		// STRING 操作
		// SET key value将字符串值value关联到key。
		redis.set("name", "wangjun1");
		redis.set("id", "123456");
		redis.set("address", "guangzhou");
		// SETEX key seconds value将值value关联到key，并将key的生存时间设为seconds(以秒为单位)。
		redis.setex("foo", 5, "haha");
		// MSET key value [key value ...]同时设置一个或多个key-value对。
		redis.mset("haha", "111", "xixi", "222");
		// redis.flushAll();清空所有的key
		System.out.println(redis.dbSize());// dbSize是多少个key的个数
		// APPEND key value如果key已经存在并且是一个字符串，APPEND命令将value追加到key原来的值之后。
		redis.append("foo", "00");// 如果key已经存在并且是一个字符串，APPEND命令将value追加到key原来的值之后。
		// GET key 返回key所关联的字符串值
		redis.get("foo");
		// MGET key [key ...] 返回所有(一个或多个)给定key的值
		List<String> list = redis.mget("haha", "xixi");
		redis.set("jack", "1");
		for(int i=0;i<100;i++){
			service.execute(new Runnable() {
				
				public void run() {
					JedisLock lock = new JedisLock(redis, "jack", 10000, 30000);
					try {
						lock.acquire();
						int value = Integer.valueOf(redis.get("jack"))+1;
						redis.set("jack", String.valueOf(value));
					} catch (InterruptedException e) {
						e.printStackTrace();
					}finally {
						lock.release();
					}
				}
			});
		}
		System.out.println(">>>>>>>>>>>>>>>>>>>>"+redis.get("jack"));
	}

	public static void main(String[] args) {
		JedisDemo t1 = new JedisDemo();
		t1.test();
	}
}
